#include "user_extern.h"

static uint8_t selidx = 0; /* 本地时间 选择条目 */
static void switch_sntp_en(void);
static void config_local_time(void);

/*********************************************************************
 *  名称： win12_setting_time_time_display
 *  功能： 时间配置 显示接口
 *  参数： void
 *  返回值：win_ret 窗口显示状态
 ********************************************************************/
uint8_t win12_setting_time_time_display(void)
{
    char sntp_switch[4] = {0};
    char tmp_str[4] = {0};

    uint8_t win_ret = WINDOWS_STATUS_DIS_ONLY;
    ui.draw_sys_title(const_setting_time);

    oled.show_string(3, 16, T(const_wizard_SNTP), 16, 1);
    if (Dsystem.sys_sntp_en == 1)
    {
        strcpy(sntp_switch, const_on);
    }
    else
    {
        strcpy(sntp_switch, const_off);
        sprintf(tmp_str, "%02d", mtime.g_time.tm_hour);
        oled.show_string(44, 32, T(tmp_str), STR_SIZE_16, (selidx == 1) ? 0 : 1);
        sprintf(tmp_str, "%s", ":");
        oled.show_string(60, 32, T(tmp_str), STR_SIZE_16, 1);
        sprintf(tmp_str, "%02d", mtime.g_time.tm_min);
        oled.show_string(68, 32, T(tmp_str), STR_SIZE_16, (selidx == 2) ? 0 : 1);

        sprintf(tmp_str, "%04d", mtime.g_time.tm_year);
        oled.show_string(24, 48, T(tmp_str), STR_SIZE_16, (selidx == 3) ? 0 : 1);
        sprintf(tmp_str, "%s", "-");
        oled.show_string(56, 48, T(tmp_str), STR_SIZE_16, 1);
        sprintf(tmp_str, "%02d", mtime.g_time.tm_mon);
        oled.show_string(64, 48, T(tmp_str), STR_SIZE_16, (selidx == 4) ? 0 : 1);

        sprintf(tmp_str, "%s", "-");
        oled.show_string(80, 48, T(tmp_str), STR_SIZE_16, 1);

        sprintf(tmp_str, "%02d", mtime.g_time.tm_mday);
        oled.show_string(88, 48, T(tmp_str), STR_SIZE_16, (selidx == 5) ? 0 : 1);
    }
    oled.show_string(64, 16, T(sntp_switch), STR_SIZE_16, (selidx == 0) ? 0 : 1);
    return win_ret;
}

/*********************************************************************
 *  名称： win12_setting_time_time_btn_select
 *  功能： 时间配置 界面 选择按钮触发，切换下一个可选项
 *  参数： void
 *  返回值：0
 ********************************************************************/
uint8_t win12_setting_time_time_btn_select(void *arg)
{
    if (Dsystem.sys_sntp_en == 0)
    {
        selidx++;
        if (selidx > 5)
            selidx = 0;
    }

    return WINDOWS_STATUS_DIS_ONLY;
}

/*********************************************************************
 *  名称： win12_setting_time_time_btn_enter
 *  功能： 时间配置 界面 确定按钮触发，切换sntp开关/配置local时间
 *  参数： void
 *  返回值：0
 ********************************************************************/
uint8_t win12_setting_time_time_btn_enter(void *arg)
{
    /*  */
    if (selidx == 0)
    {
        switch_sntp_en();
    }
    else
    {
        config_local_time();
    }

    return WINDOWS_STATUS_DIS_ONLY;
}

/*********************************************************************
 *  名称： win12_setting_time_time_btn_exit
 *  功能： 时间配置 界面 退出按钮触发，保存配置，返回上一页
 *  参数： void
 *  返回值：WINDOWS_STATUS_INIT 下一次显示状态
 ********************************************************************/
uint8_t win12_setting_time_time_btn_exit(void *arg)
{
    selidx = 0;
    /* 关闭sntp，保存本地时钟 */
    if (Dsystem.sys_sntp_en == 0)
    {
        mtime.ltime_to_tstamp();
    }
    else
    {
        //同步sntp时钟；
        mtime.msntp_init();
        time_t now;
        time(&now);
        mtime.g_timestamp = now;
    }

    flash_set_value_i8(SYSTEM_VALUE, SYS_SNTP_EN, Dsystem.sys_sntp_en);
    flash_commit();

    Dsystem.windows_cur_id = WIN_UI_OTHERMO;
    Dsystem.windows_sub_id = WIN_SUI_SETTING_TIME;
    return WINDOWS_STATUS_INIT;
}

/**************************** 内联函数 ********************************/
/*********************************************************************
 *  名称： switch_sntp_en
 *  功能： 切换sntp开关
 *  参数： void
 *  返回值：void
 ********************************************************************/
static void switch_sntp_en(void)
{
    if (Dsystem.sys_sntp_en == 0)
    {
        Dsystem.sys_sntp_en = 1;
    }
    else
    {
        Dsystem.sys_sntp_en = 0;
        mtime.tstamp_to_ltime();
    }
}

/*********************************************************************
 *  名称： config_local_time
 *  功能： 本地时间配置逻辑
 *  参数： void
 *  返回值：void
 ********************************************************************/
static void config_local_time(void)
{
    switch (selidx)
    {
    case 1:
        local_time_add_hour(&mtime.g_time);
        break;
    case 2:
        local_time_add_min(&mtime.g_time);
        break;
    case 3:
        local_time_add_year(&mtime.g_time);
        break;
    case 4:
        local_time_add_month(&mtime.g_time);
        break;
    case 5:
        local_time_add_day(&mtime.g_time);
        break;
    }
}
